import axios from "axios";
import router from "@/router";
// import qs from "qs";
import { storage } from "@/utils";
import config from "@/utils/config"

import { Message } from "element-ui";

export const BASE_URL_CONFIG = { // 基础地址
  // development: "http://47.107.248.252:19678", // 开发环境 模拟盘
  // production: "http://47.107.248.252:19678" // 生产环境 实盘

  development: "https://scrmapis.sbml.x2oo.com/___scrmadmin.php?", // 开发环境 模拟盘
  production: "https://scrmapis.ml0101.com/___scrmadmin.php?" // 生产环境 实盘
}

const env = process.env.VUE_APP_MODE === "zs" ? "production" : "development";
// env="production"
// const env = process.env.VUE_APP_MODE === "zs" ? "development" : "production";
const API_URL_CONFIG = { // 请求地址配置
  development: {
    apiUrl: `${BASE_URL_CONFIG.development}akey=`, // 请求接口
    imgUrl: "https://imgsv1.ml0101.com/xcximg/mlshop", // 静态图片url
    env: "dev"
  },
  production: {
    apiUrl: `${BASE_URL_CONFIG.production}akey=`, // 请求接口
    imgUrl: "https://imgsv1.ml0101.com/xcximg/mlshop", // 静态图片url
    env: "prod"
  }

  // development: {
  //   apiUrl: `${BASE_URL_CONFIG.development}/dqkj/akey=`, // 请求接口
  //   imgUrl: "https://imgsv1.ml0101.com/xcximg/mlshop", // 静态图片url
  //   env: "dev"
  // },
  // production: {
  //   apiUrl: `${BASE_URL_CONFIG.production}/dqkj/akey=`, // 请求接口
  //   imgUrl: "https://imgsv1.ml0101.com/xcximg/mlshop", // 静态图片url
  //   env: "prod"
  // }
}

const baseUrlConfig = BASE_URL_CONFIG[env]; // 请求地址配置
const apiConfig = API_URL_CONFIG[env]; // 请求地址配置
console.log(process.env);

// axios.defaults.withCredentials = true;

// 设置post请求头
// axios.defaults.headers = {
//   "Content-Type": "application/json;charset=utf-8",
//   "token":"",
// };
// axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

// 超时时间
axios.defaults.timeout = 130000;

// http请求拦截器
axios.interceptors.request.use(
  (config) => config,
  (error) => Promise.reject(error)
);

// http响应拦截器
axios.interceptors.response.use(
  (data) => {
  // 响应成功关闭loading
    if (data.data.rcode === "-1002") {
      Message.error("登录失效，跳转到登录页重新登录", 2500)
      setTimeout(() => {
        storage.clear()
        // router.push({
        //   path: "/login"
        // // query:{
        // //   URL:location.hostname
        // // }
        // })
      }, 2500)
    } else if (data.data.rcode === "-999") {
      Message.error(data.data.rmsg, 2500)
      setTimeout(() => {
        storage.clear()
        router.push({
          path: "/401"
          // query:{
          //   URL:location.hostname
          // }
        })
      }, 1000)
    }
    return data
  },
  (error) => {
    console.log(error)
    console.log("服务器无响应");
    Message.error("服务器无响应", 2500);
    return Promise.reject(error);
  }
);

/** post请求
 * @param {String} akey akey
 * @param {Object} data 需要发送的数据
 * @param {String} url 请求得地址  不填默认请求 URL这个变量的地址
 * @param {Boolean} flag 是否需要 progx_key
 * @returns {Promise} Promise对象和请求回来的数据
 * */

const post = function (akey, data = {}, url) {
  const user = storage.get(config.userCatchKey);
  axios.defaults.headers = {
    "Content-Type": "application/json;charset=utf-8",
    token: user === null ? '' : user.token,
    // token: user === null ? "af50dfeabb3eeca5fdb10fad81866d6e" : user.token
  };
  const sendData = {
    ...data
  };
  const path = url || apiConfig.apiUrl + akey
  return new Promise((resolve, reject) => {
    axios.post(path, sendData).then(
      (response) => {
        resolve(response.data);
      }
    ).catch((err) => reject(err));
  });
};
/** 高德地图 get请求
 * key 用户在高德地图官网申请Web服务API类型KEY
* */
const mapGet = function (data = {}, url) {
  axios.defaults.headers = {
    "Content-Type": "application/json;charset=utf-8"
    // token: user === null ? '' : user.token,
    // token: user === null ? "af50dfeabb3eeca5fdb10fad81866d6e" : user.token
  };
  const key = "75871904a157d7b3c9ddf9af38d31572";
  const sendData = {
    key,
    ...data
  };
  return axios({
    url,
    method: "get",
    params: {
      ...sendData
    }
  })
    .then(
      (res) => Promise.resolve(res.data),
      (err) => Promise.reject(err)
    )
    .catch((err) => Promise.reject(err));
  // return new Promise((resolve, reject) => {
  //   axios.get("https://restapi.amap.com/v3/assistant/inputtips?parameters", sendData).then(
  //     (response) => {
  //       resolve(response.data);
  //     }
  //   ).catch((err) => reject(err));
  // });
};
/** upImg上传请求
 * @param {String} akey akey
 * @param {Object} obj formdata
 * @param {Function} callback 上传进度回调
 * @param {String} url 请求得地址  不填默认请求 IMG_POST_URL这个变量的地址
 * @returns {Promise} Promise对象和请求回来的数据
 * */
const upImg = function (akey, obj, callback, url) { // 上传图片
  const user = storage.get(config.userCatchKey);

  axios.defaults.headers.token = user === null ? "" : user.token;
  const formdata = new FormData(); // 创建form对象
  Object.keys(obj).forEach((res) => {
    formdata.append(res, obj[res])
  });
  formdata.append("akey", akey);
  return axios({
    url: url || apiConfig.apiUrl,
    method: "post",
    data: formdata,
    onUploadProgress(progressEvent) { // 原生获取上传进度的事件
      if (progressEvent.lengthComputable) {
        // 属性lengthComputable主要表明总共需要完成的工作量和已经完成的工作是否可以被测量
        // 如果lengthComputable为false，就获取不到progressEvent.total和progressEvent.loaded
        callback(progressEvent);
      }
    }
  })
    .then(
      (res) => Promise.resolve(res.data),
      (err) => Promise.reject(err)
    )
    .catch((err) => Promise.reject(err));
};

export {
  post, upImg, baseUrlConfig, apiConfig, mapGet
};
